package com.yunke.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import com.yunke.common.base.YunkeBaseEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;

/**
 * 服务订单实体类
 * 
 * @author yunke
 * @since 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("dz_service_order")
@Schema(description = "服务订单")
public class YunkeServiceOrder extends YunkeBaseEntity {

    /**
     * 订单编号
     */
    @Schema(description = "订单编号")
    private String orderNo;

    /**
     * 服务ID
     */
    @Schema(description = "服务ID")
    private Long serviceId;

    /**
     * 服务标题
     */
    @Schema(description = "服务标题")
    private String serviceTitle;

    /**
     * 服务提供者用户ID
     */
    @Schema(description = "服务提供者用户ID")
    private Long providerId;

    /**
     * 服务购买者用户ID
     */
    @Schema(description = "服务购买者用户ID")
    private Long buyerId;

    /**
     * 订单类型：1-立即预订 2-预约服务
     */
    @Schema(description = "订单类型：1-立即预订 2-预约服务")
    private Integer orderType;

    /**
     * 服务数量
     */
    @Schema(description = "服务数量")
    private Integer quantity;

    /**
     * 单价
     */
    @Schema(description = "单价")
    private BigDecimal unitPrice;

    /**
     * 订单总金额
     */
    @Schema(description = "订单总金额")
    private BigDecimal totalAmount;

    /**
     * 实际支付金额
     */
    @Schema(description = "实际支付金额")
    private BigDecimal payAmount;

    /**
     * 优惠金额
     */
    @Schema(description = "优惠金额")
    private BigDecimal discountAmount;

    /**
     * 服务时间（预约时间）
     */
    @Schema(description = "服务时间")
    private Long serviceTime;

    /**
     * 服务地址
     */
    @Schema(description = "服务地址")
    private String serviceAddress;

    /**
     * 联系人姓名
     */
    @Schema(description = "联系人姓名")
    private String contactName;

    /**
     * 联系人电话
     */
    @Schema(description = "联系人电话")
    private String contactPhone;

    /**
     * 特殊要求
     */
    @Schema(description = "特殊要求")
    private String requirements;

    /**
     * 订单状态：1-待支付 2-已支付 3-服务中 4-已完成 5-已取消 6-已退款
     */
    @Schema(description = "订单状态：1-待支付 2-已支付 3-服务中 4-已完成 5-已取消 6-已退款")
    private Integer status;

    /**
     * 支付状态：0-未支付 1-已支付 2-已退款
     */
    @Schema(description = "支付状态：0-未支付 1-已支付 2-已退款")
    private Integer payStatus;

    /**
     * 支付方式：1-余额支付 2-微信支付 3-支付宝支付
     */
    @Schema(description = "支付方式：1-余额支付 2-微信支付 3-支付宝支付")
    private Integer payMethod;

    /**
     * 支付时间
     */
    @Schema(description = "支付时间")
    private Long payTime;

    /**
     * 第三方支付流水号
     */
    @Schema(description = "第三方支付流水号")
    private String transactionId;

    /**
     * 确认时间（服务确认）
     */
    @Schema(description = "确认时间")
    private Long confirmTime;

    /**
     * 开始服务时间
     */
    @Schema(description = "开始服务时间")
    private Long startTime;

    /**
     * 完成时间
     */
    @Schema(description = "完成时间")
    private Long completeTime;

    /**
     * 取消时间
     */
    @Schema(description = "取消时间")
    private Long cancelTime;

    /**
     * 取消原因
     */
    @Schema(description = "取消原因")
    private String cancelReason;

    /**
     * 取消者：1-买家取消 2-卖家取消 3-系统取消
     */
    @Schema(description = "取消者：1-买家取消 2-卖家取消 3-系统取消")
    private Integer cancelBy;

    /**
     * 退款金额
     */
    @Schema(description = "退款金额")
    private BigDecimal refundAmount;

    /**
     * 退款时间
     */
    @Schema(description = "退款时间")
    private Long refundTime;

    /**
     * 退款原因
     */
    @Schema(description = "退款原因")
    private String refundReason;

    /**
     * 是否已评价：0-否 1-是
     */
    @Schema(description = "是否已评价：0-否 1-是")
    private Integer isReviewed;

    /**
     * 评价时间
     */
    @Schema(description = "评价时间")
    private Long reviewTime;

    /**
     * 订单备注
     */
    @Schema(description = "订单备注")
    private String remark;


} 